<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
</head>

<body>
    <ul class="uls">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        let lis = document.querySelectorAll(".uls>li");
        // for (let i = 0; i < lis.length; i++) {
        //     lis[i].onclick = function() {
        //         alert(i);
        //     };
        // }
        // {i=0 lis[0].onclick=function(){}}
        // {i=1 lis[1].onclick=function(){}}
        // {i=2 lis[2].onclick=function(){}}
        // {i=3 lis[3].onclick=function(){}}
        for (var i = 0; i < lis.length; i++) {
            lis[i].onclick = (function(a) {
                console.log(a);
                return function() {
                    alert(a);
                };
            })(i);
            //这种（）的写法叫做匿名函数的执行
            // 这样进入页面就执行四次匿名函数 就生成了四个作用域
            // {i=0 lis[0].onclick=function(){}}
            // {i=1 lis[1].onclick=function(){}}
            // {i=2 lis[2].onclick=function(){}}
            // {i=3 lis[3].onclick=function(){}}
        }
        //简单的理解就是函数中套了一个函数，内层函数可以访问外层函数中的变量
        // 有时候需要用到函数内的局部变量，在正常情况下是不能读取到的，这个时候就需要用到闭包
        // 闭包函数用到外层函数的变量 那么这个外层函数就算执行完了 变量也不会被销毁 因为闭包函数在等着用
    </script>
</body>

</html>